Imagine a casino pays you even money on a coin that lands heads 60% of the time. You have a real advantage, so how much of your bankroll should you wager each round to maximize your profit?
In 1956, John Kelly at Bell Labs came up with the answer: 20%. Bet 20% of your bankroll, and your money will grow on average around 2% per round. Bet only 10%, and you keep only three-quarters of that growth, with less volatile swings. However, if you feel like pressing your advantage and bet an aggressive 40% every round, your long-run growth turns slightly negative. Same coin, same odds, but now you’ve slowly bet yourself to a loss.
In the world of sports betting and investing alike, the amount that you bet matters just as much as the prediction.
At the heart of this optimization question is the Kelly Criterion: a formula that calculates the size of your bet to maximize your long-run growth. It's powerful and unforgiving, because it penalizes you for playing your hand too big as well as for playing it too safe.
Maximizing this growth rate gives the optimal Kelly fraction f* = 2p − 1. With a 60% chance of winning, that means betting 20% of your bankroll.
Another layer of complexity in the world of unpredictable markets is that no one hands you the 60% edge; you have to find or create one using a model yourself.
Most machine-learning approaches to investing allocate their money in two steps. A predictive model forecasts what each asset will return, then an optimizer turns those forecasts into positions. The first step is prediction; the second is decision-making.
Another headache comes from the small bits of noise/errors that the optimizer amplifies.
Suppose two similar stocks are truly expected to return 7.5% each, but your model forecasts 8.0% for one and 7.0% for the other. The error is only half a percentage point, but the optimizer sees a clear winner and piles into it.
A tiny forecast error becomes a big position, because the optimizer's whole job is to exploit even the smallest of differences between assets.
A forecasting model tries to minimize squared error, which means it is rewarded for being as correct as possible, while an asset allocation algorithm tries to find the best one relative to others given risk and return.
Put together, the two stages optimize for different goals, so improving the first doesn't necessarily lead to better results in the second.
A recent preprint by Jiayu Li tries to close that gap using a different portfolio management model, KellyBoost. It trains a gradient-boosted tree model directly on how fast a portfolio's wealth would have grown, so the model outputs portfolio weights and skips the forecast entirely.
Portfolio optimization had primarily used neural networks because backpropagation could help optimize different objectives, but boosted trees, the workhorse of tabular data, hadn't been explored as much because they needed custom gradient and curvature formulas for the loss.
The author derived both of these equations and tested their model against years of historical time-series data for a range of different assets.
So the question is: does this new approach work? Sort of, and that's the interesting part.
The direct approach using XGBoost beat a classification shortcut using LightGBM every time it was tested, but the old forecast-then-optimize pipeline still came out ahead.
But it's important to recognize the flaws in this model as well as possible changes and further experiments we could conduct to make it better.

